Добро пожаловать в Engee
Бинарные массивы
Цель: Научиться использовать логические выражения, чтобы составлять бинарные маски, позволяющие выбирать интересующие элементы из массивов.
using CSV, DataFrames;
cd(@__DIR__);
data = CSV.read("datafile.csv", DataFrame, header=0);
sample = data[:,1];
𝜌 = data[:,2];
v1 = data[:,3];
v2 = data[:,4];
mass1 = 𝜌 .* v1;
mass2 = 𝜌 .* v2;
display(data)
Задача 1
Операторы, определяющие отношения, такие как > (больше), < (меньше), == (равно), и != (не равно), позволяют сравнивать несколько значений. Результат сравнения на предмет равенства или неравенства может принимать только значения true (истина, иногда участвует в вычислениях как значение 1) или false (ложь, иногда воспринимается как значение 0).
< рассчитайте результат сравнения числа π и числа 4. Результат поместите в переменную с названием x.
Подсказка
Поместите оператор < между двумя скалярами. Схожий пример: a = 4 < 6. Задать число π вы можете как самим греческим символом, так и через обозначение pi.
Решение
x = pi < 4
Задача 2
Вы можете сравнивать все значения массива, поэлементно, с одним числом. Для этого нужно использовать посимвольную версию логических операторов (с точкой перед ними). Результатом будет массив логических значений той же размерности .
[5 10 15] .> 12
1×3 BitMatrix: 0 0 1
v1 элементы со значением меньше 4. Поместите результат в переменную y.
Подсказка
Поставьте оператор .< между вектором и скаляром.
Решение
y = v1 .< 4
Задача 3
Логический массив (BitVector или BitMatrix) можно использовать в качестве индекса массива. В таком случае Julia возвращает только те элементы массива, которые соответствуют элементам логического массива, равными 1 (истина). В следующем примере мы получаем только те элементы вектора v1, значения которых превышают 6.
v = v1[v1 .> 6]
2-element Vector{Float64}: 6.6678 9.0698
z, содержащую все элементы вектора v1, значения которых меньше 4.
Подсказка
При помощи оператора .< создайте логический массив, а затем используйте его в качестве индекса для получения значений вектора, как в примере: b = a[a .< 4]
Решение
z = v1[v1 .< 4]
Задача 4
Логическую индексацию по значениям одного вектора можно использовать и для индексации другого вектора.
v = sample[v1 .> 6]
2-element Vector{Int64}: 18 23
a все элементы вектора sample, соответствующие тем позициям в векторе, при которых значения вектора v1 меньше 4.
Подсказка
Создайте логический массив при помощи оператора.<, используйте результат для индексирования матрицы sample как в примере: c = a[b .< 4]
Решение
a = sample[v1 .< 4]
Задача 5
Вы можете использовать логические массивы, чтобы индексировать другие массивы, например для работы с отдельными их элементами. Скажем, если вам нужно заменить значения всех элементов массива x, значения которых равны 999, на значение 1, синтаксис будет следующим:
x[x.==999] .= 1
v1 таким образом, чтобы все элементы, значения которых меньше 4, стали равны 0.
Подсказка
Создайте логический массив для значений вектора v1 при помощи оператора <, приравняйте результат к желаемому скалярному значению (0) при помощи поэлементного приравнивания .=.
Решение
v1[v1.<4] .= 0
Задача 6*
Кроме операторов сравнения, вы можете использовать логические операторы AND (&) и OR (|), например, чтобы совместить несколько операций сравнения.
Чтобы получить все элементы, значения которых меньше 6 и одновременно больше 5, используйте оператор & (и):
x = v1[(v1.<6) .& (v1.>5)]
Чтобы получить все элементы, значения которых больше 6 или меньше 2, используйте оператор | (или):
x = v1[(v1.>6) .| (v1.<2)]
Попробуйте получить элементы из массива sample, значения которых расположены в интервале между 10 и 20.